package com.webserver.http;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
 * @author 老安
 * @data 2022/7/12 20:31
 * 这个类用于定义所有的Http协议规定的内容,可被复用,称之为数据字典
 */
public class HttpContext {
    //回车符
    public static final char CR = 13;
    //换行符
    public static final char LF = 10;
    /*
     * 资源后缀与MIME类型的对应关系
     * key: 资源的后缀 例如:png
     * value: MIME类型 例如:image/png
     * */
    private static Map<String, String> mimeMapping = new HashMap<>();

    static {
        initMimeMapping();
    }

    private static void initMimeMapping() {
        /*
         * 读取properties文件
         * .properties类型的文件,内容格式就是key=value
         * key就是文件的类型 vlaue就是文件的mime值
         * 所以可以将该文件中的key存储到mimeMapping中的key,value也如此
         * 读取.properties文件的有专门的工具类
         * java.util.Properties
         *
         * */
        Properties prop = new Properties();
        /*
         * load方法加载配置文件,会自动将文件的内容进行解析存储到prop对象中
         * 两个实际开发中常用的相对路径的区别:
         * 类名.class.getClassLoader().getResource(".")
         * 这里面的"."可以简单理解就是定位target/classes
         * 类名.class.getResourceAsStream(".")
         * 这里面的"."可以简单理解就是定位当前类所在的目录
         * */
        try {
            prop.load(
                    HttpContext.class.getResourceAsStream(
                            "./web.properties"
                    )
            );
            //将存储到prop中的所有的key和value便利出来,存储到mimeMapping中
            prop.forEach(
                    (k,v)->mimeMapping.put(k.toString(), v.toString())
            );
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /*
     * 根据文件的后缀获取对应的MIME值
     * */
    public static String getMimeType(String ext) {
        return mimeMapping.get(ext);
    }

    public static void main(String[] args) {
        mimeMapping.forEach(
                (k,v)-> System.out.println("类型为:"+k+"的资源对应的mime值是:"+v)
        );
    }
}
